#include <stdio.h>
#include "./TADs/lista.h"
#include "./Separacion de terminos/contextos.h"

lista_t* obtenerNombresArchivos(void)
{
	lista_t* filesNames = lista_crear();
	
	FILE* archivoNombresArchivo;
	archivoNombresArchivo = fopen(nombreArchivoArchivos, "w");
	
	DIR *dir;
    struct dirent *dent;
    dir = opendir(pathCarpetaDatos);
    char* fileDir;
    
    if(dir != NULL)
    {
        while( (dent=readdir(dir)) != NULL )
        {
			if (strlen(dent->d_name) > 4 && esArchivoValido(dent->d_name))
			{
				fileDir = malloc(sizeof(char)*(strlen(pathCarpetaDatos) + strlen(dent->d_name))+ sizeof(char));
				strcpy(fileDir, pathCarpetaDatos);
				strcat(fileDir, dent->d_name);
				lista_insertar_ultimo(filesNames, fileDir);
				fprintf(archivoNombresArchivo, "%s\n", fileDir);
			}
		}
    }
    
    closedir(dir);
    fclose(archivoNombresArchivo);
    
    return filesNames;
}

void armarContextos(lista_t* filesNames)
{
	ctdctx_t* contenedor = ctdctx_crear();
	lista_iter_t* iter = lista_iter_crear(filesNames);
	unsigned int i = 0;
	
	while (lista_iter_al_final(iter) == false)
	{
		agregarElementos(lista_iter_ver_actual(iter), contenedor);
		//lista_iter_ver_actual(iter)
		lista_iter_avanzar(iter);
		i++;
	}
	
	lista_iter_destruir(iter);

}

void agregarElementos(char* fileName, ctdctx_t* contenedor)
{
	FILE * fd;
	fd = fopen(fileName, "r");
	unsigned long index = 0;
	
	bool addCharacter = true;
	char* wordMem = malloc(sizeof(char)*(1 + maxCaracteresPorPalabra));
	strcpy(wordMem, "");
	char* palabraAnterior = malloc(sizeof(char)*(1 + maxCaracteresPorPalabra));
	char word[maxCaracteresPorPalabra];
	char ch = fgetc ( fd ); 
	while(ch != EOF)
	{
		for (int i = 0; i < caracteresSeparadoresLength; i++)
		{
			if (ch == caracteresSeparadores[i])
			{
				addCharacter = false;
				break;
			}
		}
		
		if (addCharacter == false)
		{
			word[index] = '\0';
			if ( strlen(word) > 0 )
			{
				strcpy(palabraAnterior, wordMem);
				strcpy(wordMem, word);
				strLower(wordMem);
				
				if (contenedor)
					if (strlen(palabraAnterior) > 0)
						ctdctx_ingresar_palabra(contenedor, palabraAnterior, wordMem);
				
			}
			addCharacter = true;
			index = 0;
		} else {
			if (index < maxCaracteresPorPalabra)
			{
				word[index] = ch;
				index++;
			} else {
				// Si la palabra es demasiado larga es invalida y se saltea
				while (ch != ' ' && ch != EOF) ch = fgetc ( fd );
				index = 0;
			}
		}
		
		if (ch == EOF) break;
		ch = fgetc ( fd ); 
	}
	
	fclose(fd);
	free(wordMem);
	
	printf("Terminado con archivo N°%u\t%s\n", documentIndex, fileName);
}


ctdctx_ingresar_palabra(

int main(void)
{
	lista_t* filesNames = obtenerNombresArchivos();
	cantidadDocumentos = lista_largo(filesNames);
	
	armarContextos(filesNames);

	return 0;
}
